#ifndef HEAP_H_
#define HEAP_H_

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#include <assert.h>

typedef int HPDataType;

typedef struct Heap
{
    HPDataType *p;
    size_t size;
    size_t capacity;
} HP;

void HeapInit(HP *hp);                     //初始化
void HeapDestory(HP *hp);                  //释放堆
void HeapPrint(HP *hp);                    //显示堆数据
void Swap(HPDataType *a1, HPDataType *a2); //交换二个节点的内容
void HeapPush(HP *hp, HPDataType x);       //插入数据，并且控制保持是堆(向上调整)
void HeapPop(HP *hp);                      //删除根节点，并且控制保持是堆(向下调整)
bool HeapEmpty(HP *hp);                    //判断堆是否为空
size_t HeapSize(HP *hp);                   //堆的有效数据的数量
size_t HeapTop(HP *hp);                    //根的数据

#endif